package com.cencat.order.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.math.BigDecimal;

/**
 * 订单统计VO
 * @author cencat
 * @description 固定商家场景多租户SaaS企业综合管理系统订单统计VO
 * @since 2024-01-01
 */
@Data
@Accessors(chain = true)
@Schema(name = "OrderStatisticsVO", description = "订单统计VO")
public class OrderStatisticsVO implements Serializable {

    private static final long serialVersionUID = 1L;

    @Schema(description = "总订单数")
    private Long totalOrderCount;

    @Schema(description = "待支付订单数")
    private Long pendingPaymentCount;

    @Schema(description = "待发货订单数")
    private Long pendingShipmentCount;

    @Schema(description = "待收货订单数")
    private Long pendingReceiptCount;

    @Schema(description = "已完成订单数")
    private Long completedOrderCount;

    @Schema(description = "已取消订单数")
    private Long cancelledOrderCount;

    @Schema(description = "已退款订单数")
    private Long refundedOrderCount;

    @Schema(description = "总订单金额")
    private BigDecimal totalOrderAmount;

    @Schema(description = "已支付订单金额")
    private BigDecimal paidOrderAmount;

    @Schema(description = "待支付订单金额")
    private BigDecimal pendingPaymentAmount;

    @Schema(description = "已退款金额")
    private BigDecimal refundedAmount;

    @Schema(description = "平均订单金额")
    private BigDecimal averageOrderAmount;

    @Schema(description = "今日订单数")
    private Long todayOrderCount;

    @Schema(description = "今日订单金额")
    private BigDecimal todayOrderAmount;

    @Schema(description = "昨日订单数")
    private Long yesterdayOrderCount;

    @Schema(description = "昨日订单金额")
    private BigDecimal yesterdayOrderAmount;

    @Schema(description = "本月订单数")
    private Long thisMonthOrderCount;

    @Schema(description = "本月订单金额")
    private BigDecimal thisMonthOrderAmount;

    @Schema(description = "上月订单数")
    private Long lastMonthOrderCount;

    @Schema(description = "上月订单金额")
    private BigDecimal lastMonthOrderAmount;

    @Schema(description = "订单转化率(%)")
    private BigDecimal orderConversionRate;

    @Schema(description = "支付成功率(%)")
    private BigDecimal paymentSuccessRate;

    @Schema(description = "退款率(%)")
    private BigDecimal refundRate;

    @Schema(description = "客单价")
    private BigDecimal customerUnitPrice;

    @Schema(description = "复购率(%)")
    private BigDecimal repurchaseRate;

    @Schema(description = "新客户订单数")
    private Long newCustomerOrderCount;

    @Schema(description = "老客户订单数")
    private Long oldCustomerOrderCount;

    @Schema(description = "移动端订单数")
    private Long mobileOrderCount;

    @Schema(description = "PC端订单数")
    private Long pcOrderCount;

    @Schema(description = "小程序订单数")
    private Long miniProgramOrderCount;

    @Schema(description = "APP订单数")
    private Long appOrderCount;

    @Schema(description = "支付宝支付订单数")
    private Long alipayOrderCount;

    @Schema(description = "微信支付订单数")
    private Long wechatPayOrderCount;

    @Schema(description = "银行卡支付订单数")
    private Long bankCardOrderCount;

    @Schema(description = "现金支付订单数")
    private Long cashOrderCount;

    @Schema(description = "快递配送订单数")
    private Long expressOrderCount;

    @Schema(description = "自提订单数")
    private Long selfPickupOrderCount;

    @Schema(description = "平均配送时长(小时)")
    private BigDecimal averageDeliveryTime;

    @Schema(description = "订单满意度评分")
    private BigDecimal orderSatisfactionScore;

    @Schema(description = "统计时间范围")
    private String statisticsTimeRange;

    @Schema(description = "数据更新时间")
    private String dataUpdateTime;
}